const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
// 拼接路径
const resolve = dir => require('path').join(__dirname, dir)

module.exports = {
    // 发布路径
    publicPath: '/',
    // 保存时修复代码
    lintOnSave: true,
    // 本地服务配置
    devServer: {
        open: true,
        port: 8080,
        proxy: null
    },
    // 预加载 scss 公共样式变量
    css: {
        extract: true,
        loaderOptions: {
            sass: {
                data: `@import '~@/assets/style/public.scss';`
            }
        }
    },
    // 默认设置: https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-service/lib/config/base.js
    chainWebpack: config => {
        /**
         * 删除懒加载模块的 prefetch，降低带宽压力
         * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#prefetch
         * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#preload
         * 而且预渲染时生成的 prefetch 标签是 modern 版本的，低版本浏览器是不需要的
         * 有的项目把 preload 也去掉了，我个人认为 PC 端保留懒加载更合理一点
         */
        config.plugins.delete('prefetch')
        config
            // 开发环境
            .when(
                process.env.NODE_ENV === 'development',
                // sourcemap不包含列信息
                config => config.devtool('cheap-source-map')
            )
            // 非开发环境
            .when(process.env.NODE_ENV !== 'development', config => {
                config.optimization.minimizer([
                    new UglifyJsPlugin({
                        uglifyOptions: {
                            // 移除 console
                            // 其它优化选项 https://segmentfault.com/a/1190000010874406
                            compress: {
                                drop_console: true,
                                drop_debugger: true,
                                pure_funcs: ['console.log']
                            }
                        }
                    })
                ])
            })
        // svg
        const svgRule = config.module.rule('svg')
        svgRule.uses.clear()
        svgRule.include
            .add(resolve('src/assets/svg-icons/icons'))
            .end()
            .use('svg-sprite-loader')
            .loader('svg-sprite-loader')
            .options({
                symbolId: 'd2-[name]'
            })
            .end()
        // image exclude
        const imagesRule = config.module.rule('images')
        imagesRule
            .test(/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/)
            .exclude.add(resolve('src/assets/svg-icons/icons'))
            .end()
        // 判断环境加入模拟数据
        const entry = config.entry('app')
        if (process.env.MODE !== 'nomock') {
            entry.add('@/mock').end()
        }
    }
}
